public class practice2 {
    public static void main(String[] args) {
        //现有一个整数数组，数组里有一个数的个数为奇数个
        //其余为偶数个，现在要找出这个奇数个的数
        int[] arr1 = {1,1,1,1,2,2,2,3,3};
        printOdd(arr1);

        int[] arr2 = {1,1,1,2,2,2,3,3};
        printOdd2(arr2);
    }

    public static void printOdd(int[] arr){
        int eor = 0;
        for(int cur : arr){
            eor ^= cur;
        }
        System.out.println(eor);
    }

    public static void printOdd2(int[] arr){
        //现有一个整数数组，数组里有两个个数的个数为奇数个
        int eor = 0;
        for(int cur : arr){
            eor ^= cur;
        }
        //现在eor为a^b
        int rightOne = eor & (~eor + 1);
        //这一步目的是找出eor中最右为1的位置
        //例如0001100100就在第3位
        int onlyOne = 0;
        for(int cur : arr){
            if((cur & rightOne) == 0){
                onlyOne ^= cur;
            }
        }
        System.out.println(onlyOne+" "+(eor ^ onlyOne));
    }
}
